package com.gitee.kinbug.sniper.common.entity;

import java.math.BigDecimal;
import java.math.RoundingMode;

import lombok.Data;
import lombok.experimental.Accessors;

@Data
@Accessors(chain = true)
public class Boll {

	// 中轨值
	private BigDecimal mb;

	// 上轨值
	private BigDecimal up;

	// 下轨值
	private BigDecimal dn;

	// 下轨值
	private BigDecimal bbw;

	/**
	 * 出上轨率
	 */
	public BigDecimal getDerailRateUp(BigDecimal price) {
		return (price.subtract(up)).divide(this.getWidth(), 2, RoundingMode.DOWN);
	}

	/**
	 * 出下轨率
	 */
	public BigDecimal getDerailRateDn(BigDecimal price) {
		return (dn.subtract(price)).divide(this.getWidth(), 2, RoundingMode.DOWN);
	}

	/**
	 * 买涨胜率
	 */
	public BigDecimal getBuyUpWinRate(BigDecimal price) {
		BigDecimal derailRateDn = this.getDerailRateDn(price);
		if (derailRateDn.doubleValue() < -1) {
			derailRateDn = BigDecimal.ZERO;
		} else if (derailRateDn.doubleValue() > -1 && derailRateDn.doubleValue() < 0) {
			derailRateDn = new BigDecimal(0.5);
		} else if (derailRateDn.doubleValue() > 0) {
			derailRateDn = derailRateDn.add(new BigDecimal(0.5));
		}
		if (derailRateDn.doubleValue() > 1) {
			derailRateDn = BigDecimal.ONE;
		}
		return derailRateDn.abs();
	}

	/**
	 * 买跌胜率
	 */
	public BigDecimal getBuyDnWinRate(BigDecimal price) {
		BigDecimal derailRateUp = this.getDerailRateUp(price);
		if (derailRateUp.doubleValue() < -1) {
			derailRateUp = BigDecimal.ZERO;
		} else if (derailRateUp.doubleValue() > -1 && derailRateUp.doubleValue() < 0) {
			derailRateUp = new BigDecimal(0.5);
		} else if (derailRateUp.doubleValue() > 0) {
			derailRateUp = derailRateUp.add(new BigDecimal(0.5));
		}
		if (derailRateUp.doubleValue() > 1) {
			derailRateUp = BigDecimal.ONE;
		}
		return derailRateUp.abs();
	}

	// 获取boll宽度
	private BigDecimal getWidth() {
		return up.subtract(dn);
	}
}
